package pers.hl.lib_global.common

import com.amap.api.maps2d.model.LatLng
import com.blankj.utilcode.util.GsonUtils
import com.blankj.utilcode.util.StringUtils
import com.google.gson.reflect.TypeToken
import com.tencent.mmkv.MMKV
import pers.hl.lib_global.model.bean.User

/***
 * 数据缓存帮助类
 */
object MMKVHelper {

    const val KEY_CURRENT_LOCATION = "key_current_location"
    const val KEY_MYCOLLECTION = "key_mycollection"
    const val KEY_CACHE_CLICK_NOTIFICATION = "key_cache_click_notification"
    // 方便调试 记住密码
    const val savePassword = true

    val mmkv: MMKV = MMKV.defaultMMKV()!!

    fun getUser(): User? {
        return mmkv.decodeParcelable(Const.KEY.KEY_USER, User::class.java)
    }

    fun saveUser(user: User) {
        mmkv.encode(Const.KEY.KEY_USER, user)
    }

    fun removeUser() {
        mmkv.remove(Const.KEY.KEY_USER)
    }

    fun logout() {
        if (!savePassword) {
            removeUser()
        }
    }

    /**
     * 保存定位信息
     */
    fun saveCurLocation(it: LatLng) {
        mmkv.encode(KEY_CURRENT_LOCATION, it)
    }

    /**
     * 获取最新保存的定位信息
     */
    fun getCurLocation(): LatLng? {
        return mmkv.decodeParcelable(KEY_CURRENT_LOCATION, LatLng::class.java)
    }

    fun saveCollection(collectIds: MutableSet<String>) {
        mmkv.encode(KEY_MYCOLLECTION, collectIds)
    }

    fun getMyCollection(): MutableSet<String>? {
        return mmkv.decodeStringSet(KEY_MYCOLLECTION)
    }

    /**
     * 缓存通知点击行为
     */
    @JvmStatic
    fun saveNotificationClickAction(map: HashMap<String, String>) {
        mmkv.encode(KEY_CACHE_CLICK_NOTIFICATION, GsonUtils.toJson(map))
    }

    @JvmStatic
    fun getNotificationClickAction(): Map<String, String>? {
        val json = mmkv.decodeString(KEY_CACHE_CLICK_NOTIFICATION)
        if (StringUtils.isEmpty(json)) {
            return null
        }
        val type = object : TypeToken<Map<String, String>>() {}.type ?: return null
        return GsonUtils.fromJson(json, type)
    }

}